// #include<iostream>
// #include<string>
// #include<algorithm>
// using namespace std;
// //string类是这样定义的，所以你在类的实例化中不需要加上<>
// //typedef std::basic_string<char> string;


// //string 字符数组：可以扩容，可以增删改查
// void test_string1()
// {
//     //创建字符数组
//     string s1;
//     string s2("Hello World");
//     string s3(s2);
//     //调用拷贝构造函数->因为这是在创建的过程中
//     cout << s1<<'\n';
//     cout << s2<<'\n';
//     cout << s3<<'\n';
// }

// void test_string2()
// {
//     //隐式类型转换
//     string s2 = "Hello World";
//     //explicit 修饰构造函数，禁止构造函数的隐式类型转换
//     const string& s3 = "hello world";
//     //这里你理解不到：是因为临时对象是const修饰

//     //构造函数
//     string s4("hello world");
//     cout << s2 <<'\n';
//     cout << s3 <<'\n';
// }

// //string类中：重载operator[]的两个实现版本
// //size_t 是别名
// //typedef unsigned int size_t;
// // class string
// // {
// //     //引用返回：
// //     //1.减少拷贝
// //     char& operator[](size_t i)
// //     {
// //         return _str[i];
// //     }
// //     private:
// //     char* _str;
// //     size_t _size;
// //     size_t _capacity;
// // }

// //上面的例子 -> string类创建的对象，我们可以像访问数组元素一样访问string类中元素
// void test_string3()
// {
//     string s1(" keep happy");
//     s1[0] = 'x';
//     cout << s1.size() <<'\n';

//     //使用范围for：C风格数组、容器
// }

// //遍历
// // void test_string4()
// // {
// //      string s1("hello world");
// //      //1.范围for
// //      for(auto c :s1)
// //      {
// //          cout << c << " ";
// //      }
// //      cout << endl;
// //      //2.迭代器
// //      string::iterator it = s1.begin();
// //      while(it != s1.end())
// //      {
// //         cout <<*it <<" ";
// //         it++;
// //      }
// //      //end()迭代器：指向最后一个有效元素的下一个位置
// //      cout <<endl;
// //      //3.迭代
// //      for(int i = 0; i < s1.size();i++)
// //      {
// //         cout << s1[i] <<" ";
// //      }
// //      cout << endl;
// // }
// void test_string5()
// {
//     //const 修饰的迭代器
//     const string s1("hello world");
//     //string::const_iterator it = s1.begin();
//     //const_iterator -> it指向的对象是const
//     auto it1 = s1.begin();
//     while(it1 != s1.end())
//     {
//         cout << *it1 <<" ";
//         it1++;
//     }
//     cout << '\n';
//     string s2("hello");
//     //反向迭代器
//     //string::reverse_iterator it = s1.rbegin();
//     auto it = s1.rbegin();
//     //rbegin()指向的是：最后一个有效元素
//     while(it != s1.rend())
//     {
//         cout << *it <<" ";
//         it++;
//     }
//     cout <<'\n';
// }
// //反向迭代器：其是反着走的


// void test_string6()
// {
//     string s1("hello world");
//     cout << s1 <<'\n';
//     //将s1按字典序排序(升序)
//     sort(s1.begin(),s1.end());
//     //第一个和最后一个不参与排序
//     sort(++s1.begin(),--s1.end());
    
    
// }
// int main()
// {
//     //test_string1();
//     //test_string2();
//     //test_string4();
//     test_string5();
//     return 0;
// }
